package com.zmn.plat.persistence.interfaces.message;

import com.zmn.common.dto.StatusDTO;
import com.zmn.plat.model.entity.message.MsgTemplate;
import com.zmn.plat.model.entity.message.MsgTemplateQuery;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * MsgTemplateConfigDAO 消息配置DAO
 *
 * @author tanghongjun
 */
public interface MsgTemplateDAO {
    /**
     * 描述: MsgTemplate key 查询数据
     *
     * @param templateId
     * @return: MsgTemplate
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    MsgTemplate findByKey(Integer templateId);

    /**
     * 描述:查询最大key
     *
     * @return: templateId
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    Integer findKeyForMax();

    /**
     * 描述: 根据组ID、模板类型、渠道ID、城市ID查询模板信息
     *
     * @param groupId     模板组ID
     * @param channelId   渠道ID
     * @param cityId      城市ID
     * @param templateType 模板类型1,城市 2,渠道,3渠道城市,4 通用
     * @return MsgTemplate 模板信息
     * @auther tanghongjun
     * @since 2019/10/29 15:40
     */
    MsgTemplate findByGroupIdAndTypeAndChannelIdAndCityId(@Param("groupId") Integer groupId,
                                                          @Param("templateType") Integer templateType,
                                                          @Param("channelId") Integer channelId,
                                                          @Param("cityId") Integer cityId);


    /**
     * 描述: 根据查询条件分页查询
     *
     * @param query
     * @return: List<MsgTemplate>
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    List<MsgTemplate> listPageByQuery(MsgTemplateQuery query);

    /**
     * 描述: 根据查询条件查询所有数据
     *
     * @param query
     * @return: List<MsgTemplate>
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    List<MsgTemplate> listByQuery(MsgTemplateQuery query);

    /**
     * 描述: MsgTemplate 数据
     *
     * @return: List<MsgTemplate>
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    List<MsgTemplate> listAll();

    /**
     * 描述: 根据查询条件统计满足条件的数据条数
     *
     * @param query
     * @return: Integer
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    Integer countByQuery(MsgTemplateQuery query);

    /**
     * 描述: 根据主键修改数据
     *
     * @param msgTemplate
     * @return: 执行结果码
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    Integer updateByKey(MsgTemplate msgTemplate);

    /**
     * 描述: 根据主键修改基本信息
     *
     * @param msgTemplate
     * @return: 执行结果码
     * @auther: xiangjunming
     * @since: 2019/10/28 16:41
     */
    Integer updateBaseInfoByKey(MsgTemplate msgTemplate);

    /**
     * 描述: 根据主键修改消息内容
     *
     * @param msgTemplate
     * @return: 执行结果码
     * @auther: xiangjunming
     * @since: 2019/10/28 16:41
     */
    Integer updateContentByKey(MsgTemplate msgTemplate);

    /**
     * 描述: 根据主键修改消息模板的状态
     *
     * @param msgTemplate
     * @return: 执行结果码
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    Integer updateStatus(MsgTemplate msgTemplate);

    /**
     * 描述: 批量修改状态
     *
     * @param dto
     * @return: 执行结果码
     * @auther: tanghongjun
     * @since: 2018/10/22 13:58
     */
    Integer updateStatusBatch(StatusDTO dto);

    /**
     * 更新排序
     *
     * @param msgTemplate
     * @return
     * @author xiangjunming
     * @since: 2018/10/28 13:58
     */
    int updateSortByKey(MsgTemplate msgTemplate);

    /**
     * 描述: 新增数据
     *
     * @param msgTemplate
     * @return: 执行结果码
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    Integer insert(MsgTemplate msgTemplate);

    /**
     * 描述: 根据主键删除数据
     *
     * @param templateId
     * @return: 执行结果码
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    Integer deleteByKey(Integer templateId);
}
